package Negocios;

import Gestores.DtoObjects.EmailDTO;
import Gestores.Entidades.EntidadEmail;
import Gestores.Factory.FactoryClass;
import java.util.ArrayList;
import javax.swing.table.DefaultTableModel;

public class EmailNegocio {

    private EmailDTO gestorEmail;

    public EmailNegocio() {
        gestorEmail = FactoryClass.getEmailInstance();
    }

    public ArrayList<Object> buscarPorIdAfiliado(String idAfiliado) throws Exception {
        if (idAfiliado == null) {
            throw new Exception("No se ha recibido el Id para la busqueda.");
        } else {
            return gestorEmail.buscarPorIdAfiliado(idAfiliado);
        }
    }

    public ArrayList<Object> buscarPorMail(String mail) throws Exception {
        if (mail == null) {
            throw new Exception("No se ha recibido el MAIL para la busqueda.");
        } else {
            return gestorEmail.buscarPorMail(mail);
        }
    }

    public void registrar(EntidadEmail entidad) throws Exception {
        if (validarEntidad(entidad)) {
            gestorEmail.insertar(entidad);
        } else {
            throw new Exception("Entidad inconsistente.");
        }
    }

    public void actualizar(String idAfiliado, EntidadEmail eEmail) throws Exception {
        if ((idAfiliado != null) && (validarEntidad(eEmail))) {
            gestorEmail.actualizar(idAfiliado, eEmail);
        } else {
            throw new Exception("Ausencia de datos para la actualizacion del Email.");
        }
    }

    public void eliminar(EntidadEmail entidadEmail) throws Exception {
        if (entidadEmail.getMail() == null) {
            throw new Exception("Mail no esta especificado.");
        } else {
            gestorEmail.eliminacionFisica(entidadEmail);
        }
    }

    public boolean existe(String mail) throws Exception {
        if (mail == null) {
            throw new Exception("Mail no válido.");
        } else {
            return gestorEmail.existe(mail);
        }
    }

    public ArrayList<Object> mostrarDatos() throws Exception {
        return gestorEmail.listarTabla();
    }

    private boolean validarEntidad(EntidadEmail entidad) {
        if (entidad.getIdAfiliado() == null) {
            return false;
        }
        if (entidad.getMail() == null) {
            return false;
        }
        return true;
    }

    public DefaultTableModel tabularModelo(ArrayList<Object> listaDatos) {
        DefaultTableModel modelo = new DefaultTableModel();
        modelo.addColumn("Id Afiliado");
        modelo.addColumn("Correo");
        for (int i = 0; i < listaDatos.size(); i++) {
            EntidadEmail eEmail = (EntidadEmail) listaDatos.get(i);
            modelo.addRow(new Object[]{eEmail.getIdAfiliado(), eEmail.getMail()});
        }
        return modelo;
    }
}
